1.模板中的模型介绍
模型是数据唯一的、权威的信息源。它包含所储存数据的必要字段和行为。通常,每个模型对应数据库中唯一的一张表。
- 每个模型都是django.db.models.Model 的一个Python 子类。
- 模型的每个属性都表示为数据库中的一个字段。
- Django 提供一套自动生成的用于数据库访问的API
例如:
定义一个Book模型,具有id title pubDate这三个属性。
from django.db import modelsclass Book(models.Model): id=models.AutoField(primary_key=True) title=models.CharField(max_length=32) pubDate=models.DateField()
id title pubDate是模型的三个字段,每个字符都被指定成一个类属性,每个属性映射到一个数据库的列。
通过logging可以查看翻译成的sql语句
2.映射关系如下:
表名 <-------> 类名 字段 <-------> 属性 表记录 <------->类实例对象
3.数据库配置
- django默认支持sqlite,mysql, oracle,postgresql数据库
- django默认使用sqlite的数据库,默认自带sqlite的数据库驱动 , 引擎名称:django.db.backends.sqlite3
- 引擎名称:django.db.backends.mysql
setting
在django的项目中会默认使用sqlite数据库,在settings里有如下设置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }}
如果想要更改为MySQL数据库,需要修改如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'books', #你的数据库名称 'USER': 'root', #你的数据库用户名 'PASSWORD': '', #你的数据库密码 'HOST': '', #你的数据库主机,留空默认为localhost 'PORT': '3306', #你的数据库端口 }}
【注意】
- NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
- USER和PASSWORD分别是数据库的用户名和密码。
- 设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
- 然后,启动项目,会报错:no module named MySQLdb
- 这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
- 所以,我们只需要找到项目名文件下的
__init__
,在里面写入:
import pymysqlpymysql.install_as_MySQLdb()
4.创建数据库
4.1 在Terminal中执行以下命令
python manage.py makemigrations
这条命令会模板在migrations中生成0001_initial.py这个文件,这个文件中存的就是用来生成表的数据。
4.2.再次执行一个命令生成表
python manage.py migrate
这样就会生成一个叫app01_book的表
如果执行完上边两个命令,数据库中的表依然不存在的话,需要检查,项目中的settings文件中应用是否加入到
ALLED_APPS 这个列表中
5.数据库的操作
5.1查询
def index(request): # 查询所有的书籍 booklist=models.Book.objects.all() # 返回值QuerySet [obj1,obj2....] return render(request,"index.html",{ "bookList":booklist}) #将所有书籍渲染到首页中。 #前边的bookList是 index.html中的变量名称,后边这个值就是上面的书籍对象。
index.html中的内容:
{% for book_obj in bookList %} { { forloop.counter }} { { book_obj.title }} { { book_obj.pubDate|date:"Y-m-d" }} { { book_obj.price }} { { book_obj.publish }} {% endfor %}
5.2.增加
def add(request): if request.method=="POST": print(request.POST) title=request.POST.get("title") pubdate=request.POST.get("pubdate") price=request.POST.get("price") publish=request.POST.get("publish") # 插入数据 models.Book.objects.create(title=title,pubDate=pubdate,price=price,publish=publish) return redirect("/index/") return render(request,"add.html")
5.3删除
def delBook(request,id): models.Book.objects.filter(id=id).delete() return redirect("/index/")